#!/usr/bin/env bash

############################################################################
#
# 远程执行该脚本，请在命令行中直接执行以下命令：
#
#   curl -sSL https://gitee.com/tay3223/biubiubiu/raw/master/centos8-install-python392.sh | /bin/bash
#
#
############################################################################

# 封装一个函数便于下文调用
function install_python3() {
    # 安装编译工具
    yum groupinstall -y 'Development Tools'

    # 安装python时需要的依赖
    yum install -y zlib-devel bzip2-devel openssl-devel git

    # 后面pip运行时需要的依赖，现在把它安装好
    yum install -y gcc mysql-devel openssl-devel libffi-devel

    # 下载python的源码包
    mkdir -p /tmp/bao/python
    wget -c -P /tmp/bao/python/ https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/Python-3.9.2.tar.xz

    # 这个目录里面存放了所有压缩包解压之后的源码（也就是还没编译之前的源码）
    mkdir -p /tmp/source_code

    # 解压python到指定目录中
    tar Jxvf /tmp/bao/python/Python-3.9.2.tar.xz -C /tmp/source_code

    # 进入源码目录，开始编译，编译安装到指定位置
    cd /tmp/source_code/Python-3.9.2/
    ./configure --prefix=/usr/local/python39
    make && make install

    # 创建软连接，便于全局调用
    ln -s /usr/local/python39/bin/python3.9 /usr/local/bin/python
    ln -s /usr/local/python39/bin/pip3.9 /usr/local/bin/pip

    # 添加环境变量（pip安装的软件会自动软连接到'python39/bin'的目录中；因此这个环境变量的添加，是为了让pip安装的软件生效）
    THIS_PATH='export PATH=/usr/local/python39/bin:$PATH'
    echo $THIS_PATH >>/etc/profile
}

# 封装一个函数便于下文调用
function print_explain() {

    cat <<Tay

========================================================

注意：
python2在centos8中已经被全面废弃了，因此python命令是不存在的，
所以我们创建一个软连接，把python这个命令指向python3.9.2，
并不去触碰和占用系统自带的python3这个命令。


脚本运行状态：
1.python39安装完成（√）
2.python39软连接创建完成（√）


输入 python 时启动的是 python3.9.2 （这是我们本次自己安装的）
输入 python3 时启动的才是 python3.6.8（这是centos8自带的python版本）

========================================================

Tay

}

# 封装一个函数便于下文调用
function if_python_install() {

    # 检测python3命令是否已经存在
    python -V

    # 根据存在与否，执行相应的代码
    if [ $? -eq 0 ]; then
        echo "centos8系统中的python命令已经存在，无需重复安装，已退出安装程序。。。"
    else
        #编译安装python3
        install_python3

        #在终端上打印提示说明
        print_explain
    fi
}

cat /etc/centos-release | grep -E '^CentOS Linux release 8'
if [ $? -eq 0 ]; then
    echo "当前系统是Centos8系统，安装程序运行中..."

    #调用上文中的函数
    if_python_install
else
    echo "当前系统不是Centos8系统，该脚本终止运行"
fi
